<!DOCTYPE html>
<html>

<body>

    <h1>JavaScript 闭包</h1>

    <script>
        /*1.不通过var创建的变量是全局的*/
        myFunction()
       	console.log(a * a);
        function myFunction() {
            a = 4;
        } 

        console.log('================================================');

        /*2.通过计数器问题,来理解闭包*/
        // 递增计数器的函数
        function add() {
            var counter = 0; 
            counter += 1;
            return counter;
        }
        // 调用三次 add()
        add();
        add();
        console.log(add());
        //此时计数器应该是 3。但它是 1。

        console.log('================================================');
        //闭包方式解决上述问题
        var add2 = (function () {
            var counter = 0;
            return function () {counter += 1; return counter;}
        })();
        add2();
        add2();
        console.log(add2());//此时计数器应该是 3
    </script>
</body>

</html>